﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#region using for special implements
using Com.ProjectA.DAO;
using Com.ProjectA.BusinessLogic;
using Com.ProjectA.Utility;
#endregion using for special implements


namespace Com.ProjectA.BusinessLogic
{
    public class BLPersonCallPerson
    {

        #region Kiểm tra cùng cha cùng mẹ
        /// <summary>
        /// Check Same Parent and Same Mother in Famyly Annal      

        /// <param name="strPerCd">Person Code</param>
        /// <returns>True/false</returns>

        public bool CheckSameParent_SameMother(string PersonA, string PersonB)
        {
           if(PersonA.Substring(0, PersonA.Count() - 3) == PersonB.Substring(0, PersonB.Count() - 3))
           {
               return true;
           }
           return false;
        }
        #endregion
        #region Kiểm tra giới tính
        public bool Check_sex(string PersonCode)
        {
            try
            {
                BLPersonManager perMgnBl =new BLPersonManager(Constants.STR_CONN_NAME);              
                DAOPerson Pe = new DAOPerson();
                string strMsgNotify = null;
                strMsgNotify = perMgnBl.DetailPerson(PersonCode, out Pe);

                if (Pe.sex == "Y")
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                return false;
            }

        }
        #endregion
        #region Kiểm tra cùng cha khác mẹ
        /// Check Same Parent and Diffirent Mother in Famyly Annal      

        /// <param name="strPerCd">Person Code</param>
        /// <returns>True/false</returns>

        public bool CheckSameParent_DiffMother(string PersonA, string PersonB)
        {         
            if(PersonA.Substring(0, PersonA.Count() - 6) == PersonB.Substring(0, PersonB.Count() - 6)&&PersonA.Substring(PersonA.Count() - 6, 3) != PersonB.Substring(PersonB.Count() - 6, 3))
           {              
               return true;
           }
           return false;
        }
        #endregion
        #region  Kiểm tra người lớn hơn
        /// Check Old Brother or Sister in Famyly Annal      

        /// <param name="strPerCd">Person Code</param>
        /// <returns>PersonCode Old Brother/Sister</returns>
        public string OldBrother_Sister(string PersonA, string PersonB)
        {
            int key=0;
            string PA = PersonA;
            string PB = PersonB;
            while (PA != PB)
            {
                key = key + 6;
                PA = PA.Substring(0, PA.Count() - 6);
                PB = PB.Substring(0, PB.Count() - 6);
               
            }          

            if (PersonA.Substring(PersonA.Count() - key, 3) == PersonB.Substring(PersonB.Count() - key, 3))
            {
               

                if (int.Parse(PersonA.Substring(PersonA.Count() - key+3, 3)) > int.Parse(PersonB.Substring(PersonB.Count() - key+3, 3)))
                {                    
                    return PersonB;
                }
                else
                {
                    return PersonA;
                }
            }
            else if (int.Parse(PersonA.Substring(PersonA.Count() - key, 3)) > int.Parse(PersonB.Substring(PersonB.Count() - key, 3)))
            {
                return PersonB;
            }
            else
                return PersonA;

        }
        #endregion
        #region Cách xưng hô giữa 2 người
        /// <summary>
        /// Find right person call Person in Famyly Annal      
      
        /// <param name="strPerCd">Person Code</param>
        /// <returns>The call</returns>
        /// 
        public string PersonCallPerson(string PersonCd, string SearchPersonCode,out string call)
        {

            string strMsgNotify = null;
            BLPersonManager perMgnBl = new BLPersonManager(Constants.STR_CONN_NAME);
            int  PersonA = BLGenealogic.FindGenRankOfPerCd(PersonCd);
            int PersonB = BLGenealogic.FindGenRankOfPerCd(SearchPersonCode);
            
            DAOPerson PA = new DAOPerson();
            DAOPerson PB = new DAOPerson();
            //string strMsgNotify1 = null;
            string strMsgNotifyPersonA = perMgnBl.DetailPerson(PersonCd, out PA);
            string strMsgNotifyPersonB = perMgnBl.DetailPerson(SearchPersonCode, out PB);
            List<DAOMasterData> DM = new List<DAOMasterData>();
            if (PB.sex == "Y")
            {
                string master_data_type_2 = "Y";

                //trên 4 đời 
                if (PersonA - PersonB >= 5)
                {
                    string master_data_type_1;
                    string ParentA = BLGenealogic.GetXFatherCdOfPersonCd(PersonCd, PersonB - 1);

                    if (ParentA == SearchPersonCode)
                    {
                        master_data_type_1 = "M";
                        strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, -4, out DM);
                        return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                    }
                    //Kiểm tra code Parent của Person a với Person B
                    else if (ParentA == OldBrother_Sister(ParentA, SearchPersonCode))
                    {
                        master_data_type_1 = "E";
                        strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, -4, out DM);
                        return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                    }
                    else
                    {
                        master_data_type_1 = "A";
                        strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, -4, out DM);
                        return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();
                    }
                }

                if (PersonA - PersonB <= -5)
                {
                    string master_data_type_1;
                    string ParentB = BLGenealogic.GetXFatherCdOfPersonCd(SearchPersonCode, PersonA - 1);

                    if (ParentB == PersonCd)
                    {
                        master_data_type_1 = "M";
                        strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, 4, out DM);
                        return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                    }
                    //Kiểm tra code Parent của Person a với Person B
                    else if (ParentB == OldBrother_Sister(PersonCd, SearchPersonCode))
                    {
                        master_data_type_1 = "E";
                        strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, 4, out DM);
                        return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                    }
                    else
                    {
                        master_data_type_1 = "A";
                        strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, 4, out DM);
                        return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();
                    }
                }


                if (PersonA - PersonB == 0)
                {


                    string master_data_type_1 = "A";
                    if (PersonCd.Substring(PersonCd.Count() - 3, 3) != SearchPersonCode.Substring(SearchPersonCode.Count() - 3, 3))
                    {
                        // Cùng cha cùng mẹ
                        if (CheckSameParent_SameMother(PersonCd, SearchPersonCode) == true)
                        {

                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "A";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " ruột";

                        }
                        // Cùng cha khác mẹ

                        else if (CheckSameParent_DiffMother(PersonCd, SearchPersonCode) == true)
                        {
                            //return call = CasePersonCall(PersonCd, SearchPersonCode, 1);

                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "A";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " cùng cha khác mẹ";
                        }
                        // Khác Cha khác mẹ
                        else
                        {
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "A";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }

                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " họ";

                        }
                    }
                    else
                    {
                        // cùng số thứ tự trong gia dình có 
                        // 2 trường hợp 
                        // -Cùng cha khác mẹ
                        // Khác cha khác mẹ
                        if (CheckSameParent_DiffMother(PersonCd, SearchPersonCode) == true)
                        {
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "A";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " cùng cha khác mẹ";
                        }
                        else
                        {
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "A";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " họ";

                        }

                    }
                }
                else
                {
                    if (PersonA > PersonB)
                    {
                        string master_data_type_1;
                        string ParentA = BLGenealogic.GetXFatherCdOfPersonCd(PersonCd, PersonB - 1);

                        if (ParentA == SearchPersonCode)
                        {
                            master_data_type_1 = "M";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        //Kiểm tra code Parent của Person a với Person B
                        else if (ParentA == OldBrother_Sister(ParentA, SearchPersonCode))
                        {
                            master_data_type_1 = "E";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        else
                        {
                            master_data_type_1 = "A";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();
                        }

                    }
                    else
                    {
                        string master_data_type_1;
                        string ParentB = BLGenealogic.GetXFatherCdOfPersonCd(SearchPersonCode, PersonA - 1);
                        if (ParentB == PersonCd)
                        {
                            master_data_type_1 = "M";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        //Kiểm tra code Parent của Person a với Person B
                        else if (ParentB == OldBrother_Sister(ParentB, PersonCd))
                        {
                            master_data_type_1 = "E";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        else
                        {
                            master_data_type_1 = "A";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();
                        }


                    }
                }



            }
            else
            {
                string master_data_type_2 = "N";

                if (PersonA - PersonB == 0)
                {


                    string master_data_type_1 = "C";
                    if (PersonCd.Substring(PersonCd.Count() - 3, 3) != SearchPersonCode.Substring(SearchPersonCode.Count() - 3, 3))
                    {
                        // Cùng cha cùng mẹ
                        if (CheckSameParent_SameMother(PersonCd, SearchPersonCode) == true)
                        {
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "C";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " ruột";

                        }
                        //// Cùng cha khác mẹ

                        else if (CheckSameParent_DiffMother(PersonCd, SearchPersonCode) == true)
                        {
                            //return call = CasePersonCall(PersonCd, SearchPersonCode, 1);
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "C";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " cùng cha khác mẹ";
                        }
                        // Khác Cha khác mẹ
                        else
                        {
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "C";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }

                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " họ";

                        }
                    }
                    else
                    {
                        // cùng số thứ tự trong gia dình có 
                        // 2 trường hợp 
                        // Cùng cha khác mẹ
                        // Khác cha khác mẹ
                        if (CheckSameParent_DiffMother(PersonCd, SearchPersonCode) == true)
                        {
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "C";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " cùng cha khác mẹ";
                        }
                        else
                        {
                            if (SearchPersonCode == OldBrother_Sister(PersonCd, SearchPersonCode))
                            {
                                master_data_type_1 = "C";
                            }
                            else
                            {
                                master_data_type_1 = "E";
                            }
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonA - PersonB, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString() + " họ";

                        }

                    }
                }
                else
                {
                    if (PersonA > PersonB)
                    {
                        string master_data_type_1;
                        string ParentA = BLGenealogic.GetXFatherCdOfPersonCd(PersonCd, PersonB - 1);

                        if (ParentA == SearchPersonCode)
                        {
                            master_data_type_1 = "M";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        //Kiểm tra code Parent của Person a với Person B
                        else if (ParentA == OldBrother_Sister(ParentA, SearchPersonCode))
                        {
                            master_data_type_1 = "E";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        else
                        {
                            master_data_type_1 = "C";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();
                        }

                    }
                    else
                    {
                        string master_data_type_1;
                        string ParentB = BLGenealogic.GetXFatherCdOfPersonCd(SearchPersonCode, PersonA - 1);
                        if (ParentB == PersonCd)
                        {
                            master_data_type_1 = "M";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        //Kiểm tra code Parent của Person a với Person B
                        else if (ParentB == OldBrother_Sister(ParentB, PersonCd))
                        {
                            master_data_type_1 = "E";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();

                        }
                        else
                        {
                            master_data_type_1 = "C";
                            strMsgNotify = perMgnBl.CallPerson(master_data_type_1, master_data_type_2, PersonB - PersonA, out DM);
                            return call = PA.first_name.ToString() + " " + PA.middle_name.ToString() + " " + PA.last_name.ToString() + " gọi " + PB.first_name.ToString() + " " + PB.middle_name.ToString() + " " + PB.last_name.ToString() + " là " + DM[0].master_data_value_string.ToString();
                        }



                    }
                }
            }


          //  return call = "";
          
            #region AAAAAA
            //try
            //{
            //    #region PersonA=PersonB
            //    // trường hợp cùng mã Person_code
            //    if (PersonA == PersonB)
            //    {
            //        //Khác cùng số thứ tự trong gia dình
            //        // có  3 trường hợp 
            //        // -Cùng cha cùng mẹ
            //        // -Cùng cha khác mẹ
            //        // -Khác cha khác mẹ
            //        if (PersonCd.Substring(PersonCd.Count() - 3, 3) != SearchPersonCode.Substring(SearchPersonCode.Count() - 3, 3))
            //        {                       
            //            // Cùng cha cùng mẹ
            //            if (CheckSameParent_SameMother(PersonCd,SearchPersonCode)==true)
            //            {
            //                return call=CasePersonCall(PersonCd, SearchPersonCode, 0);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A gọi B là Chị ruột";
            //                //}
            //                //else
            //                //return "A gọi B là anh Trai ruột";
            //            }
            //            // Cùng cha khác mẹ
                        
            //            else if (CheckSameParent_DiffMother(PersonCd,SearchPersonCode)==true)
            //            {
            //                return call=CasePersonCall(PersonCd, SearchPersonCode, 1);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A gọi B là Chị cùng cha nhưng khác mẹ";
            //                //}
            //                //else
            //                //    return "A gọi B là anh Trai cùng cha nhưng khác mẹ";
                           
            //            }
            //            // Khác Cha khác mẹ
            //            else
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 2);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A gọi B là Chị họ";
            //                //}
            //                //else
            //                //    return "A gọi B là anh Trai họ";
            //            }
            //        }
            //        else
            //        {
            //            // cùng số thứ tự trong gia dình có 
            //            // 2 trường hợp 
            //            // -Cùng cha khác mẹ
            //            // Khác cha khác mẹ
            //          if (CheckSameParent_DiffMother(PersonCd, SearchPersonCode) == true)
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 1);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A gọi B là Chị cùng cha nhưng khác mẹ";
            //                //}
            //                //else
            //                //    return "A gọi B là anh Trai cùng cha nhưng khác mẹ";
            //            }
            //            else
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 2);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A gọi B là Chị họ";
            //                //}
            //                //else
            //                //    return "A gọi B là anh Trai họ";
            //            }

            //        }
            //        #endregion
            //    }
            //    else if (PersonA > PersonB)
            //    {
            //        // Cách nhau 1 đời
            //        if (PersonA - PersonB == 1)
            //        {
            //           // lấy person code cha của người nhỏ rồi so sánh với người lớn hơn
            //            string ParentA = BLGenealogic.GetXFatherCdOfPersonCd(PersonCd, PersonB - 1);

            //            if (ParentA == SearchPersonCode)
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 3);
            //                //if(!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A là con, B là mẹ";
            //                //}
            //                //else
            //                //{
            //                //    return " A là con, B là Cha";
            //                //}
            //            }
            //             //Kiểm tra code Parent của Person a với Person B
            //            else if (ParentA == OldBrother_Sister(ParentA, SearchPersonCode))
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 4);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A là Cháu - B là Cô";
            //                //}

            //                //else
            //                //{
            //                //     return "Cháu -Chú";
            //                //}
            //            }
            //            else
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 5);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A là Cháu - B là Cô";
            //                //}
            //                //else
            //                //{
            //                //    return "A là Cháu -B là Bác";
            //                //}
            //            }

            //        }
            //        else if (PersonA - PersonB == 2)
            //        {
            //            string ParentA = BLGenealogic.GetXFatherCdOfPersonCd(PersonCd, PersonB - 1);
            //            if (ParentA == SearchPersonCode)
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 6);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A là Cháu - B là Bà Nội";
            //                //}
            //                //else
            //                //{
            //                //    return "A là Cháu - B là Ông nội";
            //                //}
            //            }
            //            else if (ParentA == OldBrother_Sister(ParentA, SearchPersonCode))
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 7);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A là Cháu - B là Bà (nhỏ hơn ông nội)";
            //                //}
            //                //else
            //                //{
            //                //    return "A là Cháu - B là Ông (nhỏ hơn ông nội)";
            //                //}
            //            }
            //            else
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 7);
            //                //if (!Check_sex(SearchPersonCode))
            //                //{
            //                //    return "A là Cháu - B là Bà (lớn hơn ông nội)";
            //                //}
            //                //else
            //                //{
            //                //    return "A là Cháu -B là Ông (lớn hơn ông nội) ";
            //                //}
            //            }

            //        }
            //        else if (PersonA - PersonB == 3)
            //        {
            //            return call = CasePersonCall(PersonCd, SearchPersonCode, 8);
            //            //if (!Check_sex(SearchPersonCode))
            //            //{
            //            //    return "A là Cháu - B là Bà Cố";
            //            //}
            //            //else
            //            //{
            //            //    return "A là Cháu- B là Ông Cố";
            //            //}
            //        }
            //        else
            //        {
            //            return call = CasePersonCall(PersonCd, SearchPersonCode, 9);
            //            //if (!Check_sex(SearchPersonCode))
            //            //{
            //            //    return "A là Cháu - B là Bà Sơ";
            //            //}
            //            //else
            //            //{
            //            //    return "A là Cháu- B là Ông Sơ";
            //            //}
            //        }

            //    }
            //    else
            //    {
            //        if (PersonB - PersonA == 1)
            //        {
            //            string ParentB = BLGenealogic.GetXFatherCdOfPersonCd(SearchPersonCode, PersonA - 1);
            //            if (ParentB == PersonCd)
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 10);
            //                //if (!Check_sex(PersonCd))
            //                //{
            //                //    return "A là Mẹ - B là con";
            //                //}
            //                //else
            //                //{
            //                //    return "A là Cha -B là Con";
            //                //}
            //            }
            //            else if (ParentB == OldBrother_Sister(ParentB, PersonCd))
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 11);
            //                //if (!Check_sex(PersonCd))
            //                //{
            //                //    return "A là Cô - B là Cháu";
            //                //}
            //                //else
            //                //{
            //                //    return "A là Chú -B là Cháu";
            //                //}
            //            }
            //            else
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 12);

            //                //return "Bác_ Cháu";
            //            }

            //        }
            //        else if (PersonB - PersonA == 2)
            //        {
            //            string ParentB = BLGenealogic.GetXFatherCdOfPersonCd(SearchPersonCode, PersonA - 1);
            //            if (ParentB == PersonCd)
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 13);
            //                //if (!Check_sex(PersonCd))
            //                //{
            //                //    return "A là Bà nội - B là Cháu";
            //                //}
            //                //else
            //                //{
            //                //    return "Ông nội -Cháu";
            //                //}
            //            }
            //            else if (ParentB == OldBrother_Sister(ParentB, PersonCd))
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 14);
            //                //if (!Check_sex(PersonCd))
            //                //{
            //                //    return "A là Bà(Nhỏ hơn ông nội)- B là Cháu";
            //                //}
            //                //else
            //                //{
            //                //    return "A là Ông (nhỏ hơn ông nội)- B là Cháu ";
            //                //}
            //            }
            //            else
            //            {
            //                return call = CasePersonCall(PersonCd, SearchPersonCode, 14);
            //                //if (!Check_sex(PersonCd))
            //                //{
            //                //    return "A là Bà(lớn hơn ông nội)- B là Cháu";
            //                //}
            //                //else
            //                //{
            //                //    return " A là Ông (lớn hơn ông nội)-B là Cháu ";
            //                //}
            //            }

            //        }
            //        else if (PersonB - PersonA == 3)
            //        {
            //            return call = CasePersonCall(PersonCd, SearchPersonCode, 15);
            //            //if (!Check_sex(PersonCd))
            //            //{
            //            //    return "A là Bà Cố, B là Cháu";
            //            //}
            //            //else
            //            //{
            //            //    return "A là Ông Cố -B là Cháu";
            //            //}
            //        }
            //        else
            //        {
            //            return call = CasePersonCall(PersonCd, SearchPersonCode, 16);
            //            //if (!Check_sex(PersonCd))
            //            //{
            //            //    return "A là Bà Sơ, B là Cháu";
            //            //}
            //            //else
            //            //{
            //            //    return "A là Ông Sơ -B là Cháu";
            //            //}
            //        }

            //    }               
            //}
          
            //catch (Exception ex)
            //{
            //    return call = SearchPersonCode;
            //}
            #endregion 
        }
        #endregion
        #region Các trường hợp xưng hô
        public string CasePersonCall(string PersonCodeA, string PersonCodeB,int Case)
        {
            try
            {
                BLPersonManager perMgnBl = new BLPersonManager(Constants.STR_CONN_NAME);
                DAOPerson PA = new DAOPerson();
                DAOPerson PB = new DAOPerson();           
                //string strMsgNotify = null;
                string strMsgNotify = perMgnBl.DetailPerson(PersonCodeA, out PA);
                string MsgNotify = perMgnBl.DetailPerson(PersonCodeB, out PB);
                switch (Case)
                {
                    case 0:
                        if (int.Parse(PersonCodeA.Substring(PersonCodeA.Count() - 3, 3)) < int.Parse(PersonCodeA.Substring(PersonCodeB.Count() - 3, 3)))
                        {
                            return PA.first_name.ToString()+ PA.middle_name.ToString() + PA.last_name.ToString() + " là em ruột của " +PB.first_name.ToString()+ PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else  if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Chị ruột của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                           
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Anh ruột của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }                       
                        break;
                    case 1:
                        if (int.Parse(PersonCodeA.Substring(PersonCodeA.Count() - 6, 3)) < int.Parse(PersonCodeA.Substring(PersonCodeB.Count() - 6, 3)))
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là em cùng cha khác mẹ của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Chị cùng cha khác mẹ của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Anh cùng cha khác mẹ của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 2:
                          if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Chị họ của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Anh họ của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 3:
                          if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là con ruột của Mẹ " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là con ruột của Cha " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 4:
                           if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Cô " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Chú " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 5:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Cô " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Bác " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 6:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Bà nội " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Ông nội " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 7:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Bà " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Ông " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;

                    case 8:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Bà Cố " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Ông Cố" + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;

                    case 9:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Bà Sơ " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là cháu của Ông Sơ" + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;

/// /Trường hợp nguoc lại 
                     case 10:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Mẹ ruột của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Cha ruột của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 11:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Cô của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Chú của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 12:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Cô của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Bác của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 13:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là  Bà nội của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Ông nội của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 14:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Bà của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Ông của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;

                    case 15:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Bà Cố của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Ông Cố của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                    case 16:
                        if (PA.sex == "N")
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Bà Sơ của  " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        else
                        {
                            return PA.first_name.ToString() + PA.middle_name.ToString() + PA.last_name.ToString() + " là Ông Sơ của " + PB.first_name.ToString() + PB.middle_name.ToString() + PB.last_name.ToString();
                        }
                        break;
                        

                    default:
                        return "";
                        break;
                }
               
               
            }
            catch (Exception ex)
            {
                return "aa";
            }

        }
        #endregion

    }
}
